package bomberman.modelo.observadores;

import java.util.HashMap;

import bomberman.modelo.Partida;
import bomberman.modelo.armas.Explosion;
import bomberman.modelo.armas.Molotov;
import bomberman.modelo.armas.Proyectil;
import bomberman.modelo.armas.ToleTole;
import bomberman.modelo.items.BombaToleTole;
import bomberman.modelo.items.HabanoChala;
import bomberman.modelo.items.Timer;
import bomberman.modelo.mapa.Salida;
import bomberman.modelo.obstaculos.BloqueAcero;
import bomberman.modelo.obstaculos.BloqueCemento;
import bomberman.modelo.obstaculos.BloqueLadrillo;
import bomberman.modelo.personajes.Bombita;
import bomberman.modelo.personajes.Cecilio;
import bomberman.modelo.personajes.LopezReggae;
import bomberman.modelo.personajes.LopezReggaeAlado;

public class Observadores {
  private static HashMap<Class<?>, IObservador> observadores = null;
  
  public Observadores(Partida partida) {
    Observadores.observadores = new HashMap<Class<?>, IObservador>();
    Observadores.observadores.put(Molotov.class, new ObservadorMolotov(partida));
    Observadores.observadores.put(ToleTole.class, new ObservadorToleTole(partida));
    Observadores.observadores.put(Proyectil.class, new ObservadorProyectil(partida));
    Observadores.observadores.put(BloqueLadrillo.class, new ObservadorBloqueLadrillo(partida));
    Observadores.observadores.put(BloqueCemento.class, new ObservadorBloqueCemento(partida));
    Observadores.observadores.put(BloqueAcero.class, new ObservadorBloqueAcero(partida));
    Observadores.observadores.put(Cecilio.class, new ObservadorCecilio(partida));
    Observadores.observadores.put(LopezReggae.class, new ObservadorLopezReggae(partida));
    Observadores.observadores.put(LopezReggaeAlado.class, new ObservadorLopezReggaeAlado(partida));
    Observadores.observadores.put(Explosion.class, new ObservadorExplosion(partida));
    Observadores.observadores.put(Bombita.class, new ObservadorBombita(partida));
    Observadores.observadores.put(HabanoChala.class, new ObservadorHabanoChala(partida));
    Observadores.observadores.put(Timer.class, new ObservadorTimer(partida));
    Observadores.observadores.put(BombaToleTole.class, new ObservadorBombaToleTole(partida));
    Observadores.observadores.put(Salida.class, new ObservadorSalida(partida));
    Observadores.observadores.put(Partida.class, new ObservadorPartida(partida));
  }
  
  public static void notificar(Object observable) {
    if (Observadores.observadores != null) {
      IObservador unObservador = Observadores.observadores.get(observable.getClass());
      if (unObservador != null) {
        unObservador.actualizar(observable);
      }
    }
  }
}
